from sklearn.preprocessing import KBinsDiscretizer
import pandas as pd
df = pd.read_csv("D:\数据挖掘\数据预处理-两次实验\数据预处理-实验1\house_train.csv", usecols=['built_date'])
k = 3  # 设置离散之后的数据段为3

# 等宽离散化
est1 = KBinsDiscretizer(n_bins=k, encode='ordinal', strategy='uniform').fit(df) #拟合
Xt1=est1.transform(df)   #离散化
print("等宽离散化:\n",Xt1)
edge1=est1.bin_edges_   #返回区间范围
print("等宽离散化：",edge1[0])


#等频率离散化
est2 = KBinsDiscretizer(n_bins=k, encode='ordinal', strategy='quantile').fit(df)
Xt2=est2.transform(df)
print("等频率离散化:\n",Xt2)
edge2=est2.bin_edges_
print("等频率离散化：",edge2[0])

#k均值离散化
est3 = KBinsDiscretizer(n_bins=k, encode='ordinal', strategy='kmeans').fit(df)
Xt3=est3.transform(df)
print("k均值离散化:\n",Xt3)
edge3=est3.bin_edges_
print("k均值离散化区间：",edge3[0])






# # 等宽离散方法一
# d1 = pd.cut(df, k,labels=range(k))
# 将built_date等宽分成k类，命名为0,1,2，data经过cut之后生成了第一列为索引，第二列为当前行的built_date被划分为0-2的哪一类，属于2这一类的第二列就显示为2
# print(d1)
# cluster_plot(d1, k).show()